// -*-mode:c++; coding:utf-8-*-

#ifndef _XBASE_CILENT_OPTIONS_HPP_
#define _XBASE_CILENT_OPTIONS_HPP_

#include <cstddef>
#include <string>

#include <boost/date_time/posix_time/posix_time_duration.hpp>

namespace xbase
{

	//
	// 客户端配置类
	//
	// 拥有默认值，用户可修改选项值，可从文件中加载选项值，可将当前选项保存到文件中
	// 
	class client_options
	{
	public:
		typedef boost::shared_ptr<client_options> ptr_type;

	public:
		// 
		// 重试次数 - 用于限制操作失败时重试的次数
		// 

		static const std::size_t default_retry_times = 3;
		std::size_t retry_times;
		bool can_retry(std::size_t times) const { // times从0开始计数
			return (retry_interval != 0) &&	  // 仅重试间隔不为0时才启用重试
				(times < retry_times);
		}

		// 
		// 重试间隔 - 控制重试频率；若为0则不允许重试
		// 

		static const std::size_t default_retry_interval = 3; // seconds
		std::size_t retry_interval;
		boost::posix_time::seconds get_retry_interval() const {
			return boost::posix_time::seconds(retry_interval);
		}

		static const std::size_t default_stat_dump_interval = 30;	// seconds;
		std::size_t stat_dump_interval;
		boost::posix_time::seconds get_stat_dump_interval() const {
			return boost::posix_time::seconds(stat_dump_interval);
		}

		std::string stat_file_name;
		const std::string& get_stat_file_name() const {
			return stat_file_name;
		}

	public:
		client_options()
			: retry_times(default_retry_times)
			, retry_interval(default_retry_interval)
			, stat_dump_interval(default_stat_dump_interval)
			, stat_file_name("../log/xbase_stats.log") {}

		//void load(const char *filename);
		//void save(const char *filename);
	};

	typedef client_options::ptr_type client_options_ptr;

} // namespace xbase

#endif	// _XBASE_CILENT_OPTIONS_HPP_
